/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package modelo.DAO;

import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import modelo.Cargo;
import modelo.ContactoEmpresa;
import modelo.Empresa;
import modelo.conexion.Conexion;


public class EmpresaDao implements Serializable {
    
    private Connection con = null;
    private PreparedStatement pre = null;
    Conexion co = new Conexion();
    
    
    public boolean registrar (Empresa objEmpresa, ContactoEmpresa contacto){
            boolean estado = false;
        con = co.conectar();
        String sql = "insert into empresas (identificadorEmpresa, ciudad, direccion, nombreEmpresa, pais, departamento) "
                + "values (incremento_id_aspirante.NextVal, '"+objEmpresa.getCiudad()+"', '"+objEmpresa.getDireccion()+"', '"+objEmpresa.getNombreEmpresa()+"', '"+objEmpresa.getPais()+"', '"+objEmpresa.getDepartamento()+"')";
        
         String sqlContacto="insert into contactos (codigoContacto, identificacionContacto, identificarEmpresa, nombreContacto, primerApellido, segundoApellido) "
                + "values (incremento_id_aspirante.NextVal, '"+contacto.getIdentificacionContacto()+"', (select  identificadorEmpresa from empresas where nombreEmpresa='"+objEmpresa.getNombreEmpresa()+"'), '"+contacto.getNombreContacto()+"',"
                 + "'"+contacto.getPrimerApelldo()+"', '"+contacto.getSegundoApellido()+"')";
         
         String sqlTelefonoContacto="insert into telefonosContactos (codigoContacto, identificacionContacto, telefono) values ((select codigoContacto from contactos where IDENTIFICACIONCONTACTO='"+contacto.getIdentificacionContacto()+"'), '"+contacto.getIdentificacionContacto()+"', '"+contacto.getTelefono()+"')";
         
         String sqlEmailContacto ="insert into emailContacto (codigoContacto, identificacionContacto,direccionEmail) values( (select codigoContacto from contactos where IDENTIFICACIONCONTACTO='"+contacto.getIdentificacionContacto()+"'), '"+contacto.getIdentificacionContacto()+"', '"+contacto.getCorreo()+"')";
         
         String sqlTablaUsuarios = "insert into usuarios (identificacionUsuario, codigoUsuario, tipoUsuario)"
                      + " values('"+contacto.getIdentificacionContacto()+"', '"+contacto.getIdentificacionContacto()+"' , 'contactoEmpresa')";
         
         
        try {
            pre = con.prepareStatement(sql);
            pre.executeUpdate();
            estado = true;
            pre.close();
            con.close();
        } catch (SQLException ex) {
            estado = false;
           throw new ExceptionInInitializerError("1 " + ex.getMessage());
        }
        if(estado){
        con = co.conectar();
        try {
            pre = con.prepareStatement(sqlContacto);
            pre.executeUpdate();
            pre.close();
            con.close();
        } catch (SQLException ex) {
                      throw new ExceptionInInitializerError("2 " + ex.getMessage());
        }
        
        try {
                    con = co.conectar();
                    pre = con.prepareStatement(sqlTelefonoContacto);
                    pre.executeUpdate();
                    pre.close();
                    con.close();
                } catch (SQLException ex) {
                              throw new ExceptionInInitializerError("3 " + ex.getMessage());
                }
        
        try {
                    con = co.conectar();
                    pre = con.prepareStatement(sqlEmailContacto);
                    pre.executeUpdate();
                    pre.close();
                    con.close();
                } catch (SQLException ex) {
                              throw new ExceptionInInitializerError("4 " + ex.getMessage());
                }
        
                try {
                    con = co.conectar();
                    pre = con.prepareStatement(sqlTablaUsuarios);
                    pre.executeUpdate();
                    pre.close();
                    con.close();
                } catch (SQLException ex) {
                              throw new ExceptionInInitializerError("5 " + ex.getMessage());
                }
            }
        return estado;
    }
    
    
    
    public Empresa consultar (String identificadorEmpresa) {
        Empresa empresa = new Empresa();
        con = co.conectar();
        String sql = "select nombreEmpresa, ciudad, direccion, departamento, pais, identificadorEmpresa from empresas where identificadorEmpresa='"+identificadorEmpresa+"'";
        try {
            pre = con.prepareStatement(sql);
            ResultSet re = pre.executeQuery();
            if(re.next()){
               empresa.setNombreEmpresa(re.getString("nombreEmpresa"));
               empresa.setCiudad(re.getString("ciudad"));
             empresa.setDireccion(re.getString("direccion"));
             empresa.setDepartamento(re.getString("departamento"));
             empresa.setPais(re.getString("pais"));
             empresa.setIdentificadorEmpresa(re.getInt("identificadorEmpresa"));
            }
        } catch (SQLException ex) {
           throw new ExceptionInInitializerError(ex.getMessage());
        }
        
        return empresa;
    }
    
    
    public String codigoEmpresa (String identificacionContacto) {
        String codigo = null;
        con = co.conectar();
        String sql ="select identificarEmpresa from contactos where identificacionContacto='"+identificacionContacto+"'";
        try {
            pre = con.prepareStatement(sql);
            ResultSet res = pre.executeQuery();
            if(res.next()){
                codigo = res.getString("identificarEmpresa");
            }
             pre.close();
             con.close();
        } catch (SQLException ex) {
               throw new ExceptionInInitializerError(ex.getMessage());
        }        
        return codigo;
    }
    
    public List<Cargo> consultarCargos(String codigoEmpresa) {
        List<Cargo> listaCargos = new ArrayList<>();
        Cargo cargo = null;
        con = co.conectar();
       String sql2 ="select cargos.NOMBRECARGOS, cargos.DESCRIPCION, cargos.IDENTIFICADORCARGO from cargos where  cargos.IDENTIFICACIONEMPRESA='"+codigoEmpresa+"' ";
        try {
            pre = con.prepareStatement(sql2);
             ResultSet res2 = pre.executeQuery();
            while(res2.next()){
               cargo = new Cargo();
               cargo.setNombreCargos(res2.getString("NOMBRECARGOS"));
               cargo.setDescripcion(res2.getString("DESCRIPCION"));
               cargo.setIdentificadorCargo("IDENTIFICADORCARGO");     
               listaCargos.add(cargo);
            }
            pre.close();
            con.close();
        } catch (SQLException ex) {
           throw new ExceptionInInitializerError(ex.getMessage());
        }
           return listaCargos;
    }
    
    public ContactoEmpresa consultarContacto(int codigo) {
        ContactoEmpresa contactoEmpresa = new ContactoEmpresa();
        PreparedStatement pre2 = null;
        PreparedStatement pre3 = null;
        con = co.conectar();
        String sql="select codigoContacto, identificacionContacto, identificarEmpresa, nombreContacto,"
                + "primerApellido, segundoApellido from contactos where codigoContacto="+codigo+"";
        String sqlTel = "select telefono from telefonosContactos where codigoContacto="+codigo+"";
        String sqlEmail = "select direccionEmail from emailContacto where codigoContacto="+codigo+"";
        try {
            pre=con.prepareStatement(sql);
            pre2 = con.prepareStatement(sqlTel);
            pre3 = con.prepareStatement(sqlEmail);
            ResultSet re = pre.executeQuery();
            ResultSet re2 = pre2.executeQuery();
            ResultSet re3 = pre3.executeQuery();
            if(re.next()){
             contactoEmpresa.setNombreContacto(re.getString("nombreContacto"));
             contactoEmpresa.setPrimerApelldo(re.getString("primerApellido"));
             contactoEmpresa.setSegundoApellido(re.getString("segundoApellido"));
             contactoEmpresa.setCodigoContacto(re.getString("codigoContacto"));
             contactoEmpresa.setIdentificacionContacto(re.getString("identificacionContacto"));
            }
            if(re2.next()){
              contactoEmpresa.setTelefono(re2.getString("telefono"));
              
            }
            if(re3.next()){
                contactoEmpresa.setCorreo(re3.getString("direccionEmail"));
            }
            pre.close();
            pre2.close();
            pre3.close();
            con.close();
        } catch (SQLException ex) {
                throw new ExceptionInInitializerError(ex.getMessage());
        }
        return contactoEmpresa;
    }
    
    public boolean modificarContacto(ContactoEmpresa contacto){
         con = co.conectar();
         boolean estado = false;
            try {
                String sqlContacto="update contactos set nombreContacto='"+contacto.getNombreContacto()+"', primerApellido='"+contacto.getPrimerApelldo()+"', "
                        + "segundoApellido='"+contacto.getSegundoApellido()+"' where identificacionContacto='"+contacto.getIdentificacionContacto()+"'";
                pre = con.prepareStatement(sqlContacto);
                pre.executeUpdate();
                estado = true;
                pre.close();
                con.close();
            } catch (SQLException ex) {
                estado=false;
                Logger.getLogger(EmpresaDao.class.getName()).log(Level.SEVERE, null, ex);
            }
            return estado;
    }
    
    public boolean modificarEmpresa(Empresa empresa) {
        con = co.conectar();
        boolean estado = false;
        String sql="update empresas set nombreEmpresa='"+empresa.getNombreEmpresa()+"', direccion='"+empresa.getDireccion()+"' where identificadorEmpresa="+empresa.getIdentificadorEmpresa()+"";
        try {
            pre = con.prepareStatement(sql);
            pre.executeUpdate();
            pre.close();
            estado = true;
            pre.close();
            con.close();
        } catch (SQLException ex) {
            estado=false;
            Logger.getLogger(EmpresaDao.class.getName()).log(Level.SEVERE, null, ex);
        }
        return estado;
    }
    
    public List<String> listarDepartamentos (){
        con = co.conectar();
        List<String> listaDepartamentos = new ArrayList<>();
        String departamento = null;
        String sql = "select departamento from departamentosCiudades";
        try {
            pre = con.prepareStatement(sql);
            ResultSet res = pre.executeQuery();
            while(res.next()){
             departamento = res.getString("departamento");
             listaDepartamentos.add(departamento);
            }
            con.close();
            pre.close();
        } catch (SQLException ex) {
            Logger.getLogger(EmpresaDao.class.getName()).log(Level.SEVERE, null, ex);
        }
        return listaDepartamentos;
    }
    
    public List<String> listarCiudades (){
        con = co.conectar();
        List<String> listaciudades = new ArrayList<>();
        String ciudades = null;
        String sql = "select ciudades from departamentosCiudades";
        try {
            pre = con.prepareStatement(sql);
            ResultSet res = pre.executeQuery();
            while(res.next()){
             ciudades = res.getString("ciudades");
             listaciudades.add(ciudades);
            }
            con.close();
            pre.close();
        } catch (SQLException ex) {
            Logger.getLogger(EmpresaDao.class.getName()).log(Level.SEVERE, null, ex);
        }
        return listaciudades;
    }
    
    
}

